﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Praxis.Entities;
using Praxis.BusinessLogic;
using Microsoft.Practices.Unity;

namespace Praxis.UI
{
    public partial class FrmMttoEntrega : Form
    {

        [Dependency]
        public IAlquilerBL alquilerBL { get; set; }

        [Dependency]
        public IEntregaBL entregaBL { get; set; }

        [Dependency]
        public IEquipoBL equipoBL { get; set; }

        [Dependency]
        public IDetalleAlquilerBL detAlquiBL { get; set; }

        

        bool isNew = true;

        public FrmMttoEntrega()
        {
            InitializeComponent();
            this.BuildUp();
        }

        //lista de equipos por entregar
        List<DETALLE_ALQUILER> _listEquiposPorEntregar;

        private void FrmMttoEntrega_Load(object sender, EventArgs e)
        {
            eNTREGABindingSource.AddNew();
            _listEquiposPorEntregar = new List<DETALLE_ALQUILER>();
        }

        private void txtHoraEntrega_TextChanged(object sender, EventArgs e)
        {
           
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
            {
            var entrega = eNTREGABindingSource.Current as ENTREGA;

            if (entrega != null)
            {
                try
                {
                    if (isNew)
                    {
                        entregaBL.AddEntrega(entrega);
                        isNew = false;
                    }
                    else
                    {
                        entregaBL.UpdateEntrega(entrega);
                        UpdateEntrega(entrega.Codigo);
                    }
                    MessageBox.Show("ENTREGA GUARDADA CON EXITO");
                }
                catch (Exception ex)
                {

                    MessageBox.Show(this, ex.Message,
                        "Mensaje",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);                    
                }
                
            }
            
        }

        public void UpdateEntrega(Int32 id)
        {
            isNew = false;

            var entrega = entregaBL.GetFromEntregaById(id);

            eNTREGABindingSource.DataSource = entrega;
        }   
        

        private void btnBAlqAsociado_Click(object sender, EventArgs e)
        {
            CargarAlquiler();
        }

        public void Nuevo()
        {
            isNew = true;
            eNTREGABindingSource.AddNew();
        }
        private void CargarAlquiler()
        {
            FrmAlquiler frmAlquiler = new FrmAlquiler();
            frmAlquiler.ShowDialog();
            

            if (frmAlquiler.CurrentAlquiler != null)
            {
                var nuevoAlq = alquilerBL.GetAlquilerById(frmAlquiler.CurrentAlquiler.Codigo);
                var entrega = eNTREGABindingSource.Current as ENTREGA;
                entrega.ALQUILER = nuevoAlq;
                entrega.CodigoAlquiler = nuevoAlq.Codigo;
                eNTREGABindingSource.ResetBindings(true);

                dETALLE_ALQUILERBindingSource.DataSource = detAlquiBL.GetAllDetalleAlquilerByCriterio(Convert.ToInt32(codigoAlquilerTextBox.Text));
            }
            
        }


        private void btnAgregar_Click(object sender, EventArgs e)
        {
            var CurrentAlquiler = dETALLE_ALQUILERBindingSource.Current as DETALLE_ALQUILER;
            var  currentEntrega = eNTREGABindingSource.Current as ENTREGA;


            if (CurrentAlquiler != null)
            {
                var detalle = new DETALLE_ENTREGA
                {
                    CodigoEntrega = currentEntrega.Codigo,
                    CodigoEquipo = CurrentAlquiler.CodigoEquipo,
                    EQUIPO = CurrentAlquiler.EQUIPO
                    
                };

                var existe = currentEntrega.DETALLE_ENTREGA.Where(dp => dp.CodigoEquipo.Equals(CurrentAlquiler.CodigoEquipo)).SingleOrDefault();

                if (existe == null)
                {
                    currentEntrega.DETALLE_ENTREGA.Add(detalle);

                }
                else
                {
                    var rpt = MessageBox.Show(this,
                        string.Format("El equipo: {0}," +
                        "ya se encuentra en la entrega, desea agregar otro?", CurrentAlquiler.EQUIPO.Nombre),
                        "Mensaje",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Question);
                }

                _listEquiposPorEntregar.Add(CurrentAlquiler);

                quitar();
                eNTREGABindingSource.ResetBindings(true);
                dETALLE_ENTREGABindingSource1.ResetBindings(true);

            }

        }
        public void quitar()
        {
            dETALLE_ALQUILERBindingSource.RemoveCurrent();
        }

        private void btnQuitar_Click(object sender, EventArgs e)
        {
            
            var detalleEntrega = dETALLE_ENTREGABindingSource1.Current as DETALLE_ENTREGA;

            var detalleAlquiler = _listEquiposPorEntregar.Where(d => d.CodigoEquipo.Equals(detalleEntrega.CodigoEquipo)).SingleOrDefault();

            var alquiler = eNTREGABindingSource.Current as ENTREGA;

            dETALLE_ALQUILERBindingSource.Add(detalleAlquiler);
            dETALLE_ENTREGABindingSource1.ResetBindings(true);

            dETALLE_ENTREGABindingSource1.RemoveCurrent();
            _listEquiposPorEntregar.Remove(detalleAlquiler);

        }


    }
}
